These are the standards of Objective-C and Cocoa

BOOLs use YES and NO rather than TRUE and FALSE although the latter will still work
The set method of a class is: setVariable 
The get method of a class is: variable

Conventions in variable and method names are lowerCaseLetterToStartFollowedByUpperCaseForEachWord.
Classes should start with a Capital letter.

Method Overloading in Obj-C is not common. Instead naming conventions are used to convey what the method does and if and how it is overloaded. For example:
[mySphere init]
[mySphere initWithName:@"A Sphere"]
[mySphere initWithDictionary:dictionary]

These 3 functions in C++ would look like
mySphere.init()
mySphere.init("A Sphere")
mySphere.init(dictionary)

Also, operator overloading is not supported. Personally we both like operator overloading, even if it is syntactical sugar of the highest degree, it is still quite cute. Discussions on the CocoaDev mailing list were evenly divided on the opinion that it is not a shortcoming of the language to not support it.

Design by contract... overhead in testing every setter's args

It is not possible to force either classes or methods to be virtual / abstract. We put a post on the CocoaDev@apple list, and there was a heated debate on the relative merits of virtual classes. Objective-C offers a similar but much more flexible system called protocols. We have not implemented this, as we do not understand them fully. We do however use a protocol from Apple when we use the NSOutlineView class to display our list of objects.

Class Methods:
These are basically syntactical sugar. Apple uses them extensively. A class method always returns an object autorelease. The same effect can be achieved by calling alloc and then initWith...

This is an example using Apple's NSString class:

NSLog([NSString stringWithCString:"This is a log"]);		// Uses class method

vs

NSLog([[[NSString alloc] initWithCString:"This is a log"] autorelease]);	// Uses normal alloc->init->autorelease
